package com.flyinbed.coolweather.bean;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.Poi;
import com.flyinbed.coolweather.utils.LogUtil;


import java.util.List;

/**
 * 作者：Administrator on 2016/10/19 08:49
 * 邮箱：zhanghuaiha@gmail.com
 *
 * 定位返回错误码查询：
 61 ： GPS定位结果，GPS定位成功。
 62 ： 无法获取有效定位依据，定位失败，请检查运营商网络或者WiFi网络是否正常开启，尝试重新请求定位。
 63 ： 网络异常，没有成功向服务器发起请求，请确认当前测试手机网络是否通畅，尝试重新请求定位。
 65 ： 定位缓存的结果。
 66 ： 离线定位结果。通过requestOfflineLocaiton调用时对应的返回结果。
 67 ： 离线定位失败。通过requestOfflineLocaiton调用时对应的返回结果。
 68 ： 网络连接失败时，查找本地离线定位时对应的返回结果。
 161： 网络定位结果，网络定位成功。
 162： 请求串密文解析失败，一般是由于客户端SO文件加载失败造成，请严格参照开发指南或demo开发，放入对应SO文件。
 167： 服务端定位失败，请您检查是否禁用获取位置信息权限，尝试重新请求定位。
 502： AK参数错误，请按照说明文档重新申请AK。
 505： AK不存在或者非法，请按照说明文档重新申请AK。
 601： AK服务被开发者自己禁用，请按照说明文档重新申请AK。
 602： key mcode不匹配，您的AK配置过程中安全码设置有问题，请确保：SHA1正确，“;”分号是英文状态；且包名是您当前运行应用的包名，请按照说明文档重新申请AK。
 501～700：AK验证失败，请按照说明文档重新申请AK。
 */

public class MyLocationListener implements BDLocationListener {


    @Override
    public void onReceiveLocation(BDLocation location) {
        LogUtil.e("BaiduLocationApiDem", location.getLocType()+"");

        //Receive Location
        StringBuffer sb = new StringBuffer(256);
        sb.append("time : ");
        sb.append(location.getTime());
        sb.append("\nerror code : ");
        sb.append(location.getLocType());
        sb.append("\nlatitude : ");
        sb.append(location.getLatitude());
        sb.append("\nlontitude : ");
        sb.append(location.getLongitude());
        sb.append("\nradius : ");
        sb.append(location.getRadius());
        if (location.getLocType() == BDLocation.TypeGpsLocation){// GPS定位结果
            sb.append("\nspeed : ");
            sb.append(location.getSpeed());// 单位：公里每小时
            sb.append("\nsatellite : ");
            sb.append(location.getSatelliteNumber());
            sb.append("\nheight : ");
            sb.append(location.getAltitude());// 单位：米
            sb.append("\ndirection : ");
            sb.append(location.getDirection());// 单位度
            sb.append("\naddr : ");
            sb.append(location.getAddrStr());
            sb.append("\ndescribe : ");
            sb.append("gps定位成功");

        } else if (location.getLocType() == BDLocation.TypeNetWorkLocation){// 网络定位结果
            sb.append("\naddr : ");
            sb.append(location.getAddrStr());
            //运营商信息
            sb.append("\noperationers : ");
            sb.append(location.getOperators());
            sb.append("\ndescribe : ");
            sb.append("网络定位成功");
        } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果
            sb.append("\ndescribe : ");
            sb.append("离线定位成功，离线定位结果也是有效的");
        } else if (location.getLocType() == BDLocation.TypeServerError) {
            sb.append("\ndescribe : ");
            sb.append("服务端网络定位失败，可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com，会有人追查原因");
        } else if (location.getLocType() == BDLocation.TypeNetWorkException) {
            sb.append("\ndescribe : ");
            sb.append("网络不同导致定位失败，请检查网络是否通畅");
        } else if (location.getLocType() == BDLocation.TypeCriteriaException) {
            sb.append("\ndescribe : ");
            sb.append("无法获取有效定位依据导致定位失败，一般是由于手机的原因，处于飞行模式下一般会造成这种结果，可以试着重启手机");
        }
        sb.append("\nlocationdescribe : ");
        sb.append(location.getLocationDescribe());// 位置语义化信息
        List<Poi> list = location.getPoiList();// POI数据
        if (list != null) {
            sb.append("\npoilist size = : ");
            sb.append(list.size());
            for (Poi p : list) {
                sb.append("\npoi= : ");
                sb.append(p.getId() + " " + p.getName() + " " + p.getRank());
            }
        }

        int code = location.getLocType();
        LogUtil.e("BaiduLocationApiDem", sb.toString()+location.getLocType());

        if (code == 161){
            String addr = location.getAddrStr().replaceAll("\\d", "");
           // EventBus.getDefault().post(new LocationBean(addr,location.getLongitude(),location.getLatitude()));
        }else if (code == 62) {
            String text = "无法获取有效定位依据，定位失败，请检查运营商网络或者WiFi网络是否正常开启，尝试重新请求定位。";
            String mCode = code+"";
          //  EventBus.getDefault().post(new ExceptionCodeEvent(text,mCode));
          //  ToastUtil.showToast("无法获取有效定位依据，定位失败，请检查运营商网络或者WiFi网络是否正常开启，尝试重新请求定位。"+"code:"+code);
        }else if (code == 63) {
            String text = "网络异常，没有成功向服务器发起请求，请确认当前pad网络是否通畅，尝试重新请求定位。";
            String mCode = code+"";
           // EventBus.getDefault().post(new ExceptionCodeEvent(text,mCode));
          //  ToastUtil.showToast("网络异常，没有成功向服务器发起请求，请确认当前pad网络是否通畅，尝试重新请求定位。"+"code:"+code);
        }else {
            String text = "网络异常,请确认当前pad网络是否通畅.";
            String mCode = code+"";
            //EventBus.getDefault().post(new ExceptionCodeEvent(text,mCode));
           // ToastUtil.showToast("网络异常,请确认当前pad网络是否通畅"+"code:"+code);
        }
    }

}
